﻿/*
SINACOR - BMF&Bovespa
Arquivo: ITipoDescontoDiferenciado.cs
Criado em: 20-out-2009 11:31:13
Arquiteto Responsável: WGeneroso.prg
*/
using System;
using System.ServiceModel;
using System.Collections.Generic;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Security.Services;
using Sinacor.Infra.Common;
using Sinacor.Infra.Common.Exceptions.FaultContracts;

namespace Sinacor.Servico.Bovespa.Corretagem.Service.ServiceContract
{
    [ExceptionShielding]
    [ServiceContract(Namespace = "http://www.bovespa.com.br/Sinacor.Servico.Bovespa.Corretagem.Service.ServiceContract", SessionMode = SessionMode.Allowed, Name = "ITipoDescontoDiferenciado")]
    public interface ITipoDescontoDiferenciado
    {
        #region ConsultarTiposDescontosDiferenciados

        /// <summary>
        /// Consulta os tipos de descontos diferenciados conforme o filtro
        /// </summary>
        /// <param name="request">Parâmetro para consultar os tipos de descontos diferenciados</param>
        /// <returns>Lista de TipoDescontoDiferenciados</returns>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ConsultarTiposDescontosDiferenciados")]
        List<DataContract.Response.TipoDescontoDiferenciadoResponse> ConsultarTiposDescontosDiferenciados(DataContract.Request.FiltroTipoDescontoDiferenciadoRequest request);

        #endregion

        #region ObterTipoDescontoDiferenciado

        /// <summary>
        /// Obtem um tipo de desconto diferenciado
        /// </summary>
        /// <param name="request">Parâmetro para obter um tipo de desconto diferenciado</param>
        /// <returns>Tipo Desconto Diferenciado</returns>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ObterTipoDescontoDiferenciado")]
        DataContract.Response.TipoDescontoDiferenciadoResponse ObterTipoDescontoDiferenciado(DataContract.Request.FiltroTipoDescontoDiferenciadoChaveRequest request);
        
        #endregion

        #region AlterarTipoDescontoDiferenciado
        /// <summary>
        /// Altera um tipo de desconto diferenciado
        /// </summary>
        /// <param name="request"></param>
        [TransactionRequired]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "AlterarTipoDescontoDiferenciado")]
        void AlterarTipoDescontoDiferenciado(DataContract.Request.TipoDescontoDiferenciadoRequest request);
        #endregion

        #region ExcluirTipoDescontoDiferenciado
        /// <summary>
        /// Exclui um tipo de desconto diferenciado
        /// </summary>
        /// <param name="request"></param>
        [TransactionRequired]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ExcluirTipoDescontoDiferenciado")]
        void ExcluirTipoDescontoDiferenciado(DataContract.Request.FiltroTipoDescontoDiferenciadoChaveRequest request);

        #endregion

        #region IncluirTipoDescontoDiferenciado
        /// <summary>
        /// Inclui um tipo de desconto diferenciado
        /// </summary>
        /// <param name="request"></param>
        [TransactionRequired]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "IncluirTipoDescontoDiferenciado")]
        void IncluirTipoDescontoDiferenciado(DataContract.Request.TipoDescontoDiferenciadoRequest request);
        #endregion
    }
}